#ifndef     __ALG_H
#define     __ALG_H

#include <stdint.h>

namespace utils::alg {

inline uint8_t sun_xor(const uint8_t *buf, uint32_t len) {
    uint8_t s = 0;
    for (uint32_t i = 0; i < len; i ++) {
        s ^= buf[i];
    }
    return s;
}

template <typename T>
inline T abs(T a, T b) {
    if (a > b) {
        return a - b;
    }
    return b - a;
}

template <typename T>
inline T abs(T v) {
    if (v < 0) {
        return -v;
    }
    return v;
}

template <typename T, T Min, T Max>
inline bool is_in_range(T position) {
    return (position > Min) && (position < Max);
}

}


#endif
